package com.ruoyi.cloudpc.enums;

import lombok.Getter;
import lombok.extern.slf4j.Slf4j;

/**
 * 订单状态枚举
 * 新增-》待付款-》已付款-》待开通-》已完成
 *
 * @author Ten
 */
@Slf4j
@Getter
public enum     OrderStatusEnum {


    /*ORDER_STATUS_YQX(0, "已取消"),
    // 新增后为待付款
    ORDER_STATUS_DFK(1, "待付款"),
    // 付款后为待开通
    ORDER_STATUS_YFK(2, "已付款"),
    ORDER_STATUS_DKT(3, "待开通"),
    // 开通后为已完成
    ORDER_STATUS_YWC(4, "已完成");*/

    ORDER_STATUS_YQX(0, "已取消"),
    // 新增后为待付款
    ORDER_STATUS_DFK(1, "待付款"),
    // 付款后为待开通
    ORDER_STATUS_DKT(2, "待开通"),
    // 开通后为已完成
    ORDER_STATUS_YWC(3, "已完成");

    private final int status;
    private final String msg;

    OrderStatusEnum(int status, String msg) {
        this.status = status;
        this.msg = msg;
    }

    /**
     * 根据当前订单状态获取下一状态值
     *
     * @param orderStatusEnum 当前状态值
     * @return 下一状态值
     */
    public static OrderStatusEnum nextOrderStatus(OrderStatusEnum orderStatusEnum) {
        int currentStatus = orderStatusEnum.getStatus();
        return validOrderStatus(currentStatus);
    }

    /**
     * 根据当前订单状态获取下一状态值
     *
     * @param currentStatus 当前状态值
     * @return 下一状态值
     */
    public static OrderStatusEnum nextOrderStatus(int currentStatus) {
        return validOrderStatus(currentStatus);
    }

    private static OrderStatusEnum validOrderStatus(int currentStatus) {
        if (currentStatus < 0 || currentStatus > 2) {
            log.error("状态值不能小于0、大于2，当前值为{}", currentStatus);
            throw new RuntimeException("当前订单状态不允许该操作");
        }
        int nextStatus = currentStatus + 1;
        for (OrderStatusEnum statusEnum : OrderStatusEnum.values()) {
            if (statusEnum.getStatus() == nextStatus) {
                return statusEnum;
            }
        }
        throw new RuntimeException("为获取到响应订单状态码");
    }


}
